/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.dal;

import muhnes.sizoo.HibernateUtilSeguridad;
import muhnes.sizoo.modelo.Objeto;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Clase que implementa los metodos declarados en la interfaz
 * ObjetoDaoImpl 
 * @author  Nelson Chicas
 */
public class ObjetoDaoImpl extends GenericoDAO< Objeto, Integer > 
                           implements ObjetoDao {
    
    public ObjetoDaoImpl() {
        super( HibernateUtilSeguridad.getSessionFactory() );
    }
    
    @Override
    protected Class<?> getClaseEntidad () {
        return Objeto.class;
    }

    /**
     * Metodo que indica si e objeto se encuentra en la base de datos
     */
    @Override
    public Objeto buscarPorNombre(String nombre) {
        Session sesion = fabricaSesion.getCurrentSession();
        Query consulta = sesion.createQuery("from Objeto where nombre = :nombre");
        consulta.setParameter("nombre", nombre);
        Objeto objeto = (Objeto)consulta.uniqueResult();
        return objeto;
    }

    /**
     * Metodo que verifica la unicidad de la base de datos
     */
    @Override
    public boolean verificarUnicidad(Objeto entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Objeto where codigoobjeto != :codigo " +
                     "and lower(nombre) = :nombre";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo", entidad.getCodigoobjeto());
        consulta.setParameter("nombre", entidad.getNombre().toLowerCase());
        return consulta.uniqueResult() != null ? true : false;
    }
    
    /**
     * Verificar la dependencia de esta entidad con otras
     * @param entidad de tipo objeto 
     * @return boolean que indica si ya esta relacionado 
     */
    @Override
    public boolean verificarDependencia (Objeto entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Privilegio where objeto.codigoobjeto = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigoobjeto());
        return !consulta.list().isEmpty();
    }

}
